package org.jiuling.wechat.publicplatform.config;

import org.jiuling.local.tools.exception.LocalToolsException;
import org.jiuling.local.tools.verify.Assertions;

/**
 * 微信配置
 * @author 紫灵
 * @date 2022年04月12日 13时13分23秒
 */
public class WeChatConfig {

    /** 凭证类型 */
    private String grantType = "client_credential";
    /** 开发者id */
    private String appId;
    /** 开发者密码 */
    private String secret;

    public String getGrantType() {
        return grantType;
    }

    public String getAppId() {
        return appId;
    }

    public String getSecret() {
        return secret;
    }

    /**
     * 微信配置构造者
     */
    public static class Builder{

        /** 微信配置 */
        private final WeChatConfig weChatConfig;

        public Builder() {
            weChatConfig = new WeChatConfig();
        }

        /**
         * 添加凭据类型
         * @param grantType 凭据类型
         * @return 构造者对象
         */
        public Builder addGrantType(String grantType){
            weChatConfig.grantType = grantType;
            return this;
        }

        /**
         * 添加开发者id
         * @param appId 开发者id
         * @return 构造者对象
         */
        public Builder addAppId(String appId){
            weChatConfig.appId = appId;
            return this;
        }

        /**
         * 添加开发者密码
         * @param secret 开发者密码
         * @return 构造者对象
         */
        public Builder addSecret(String secret){
            weChatConfig.secret = secret;
            return this;
        }

        /**
         * 构建
         * @return 微信配置
         */
        public WeChatConfig builder() throws LocalToolsException {
            Assertions.stringIsNotBlank("凭据类型不能为空！",weChatConfig.grantType);
            Assertions.stringIsNotBlank("开发者id不能为空！",weChatConfig.appId);
            Assertions.stringIsNotBlank("开发者密码不能为空！",weChatConfig.secret);
            return weChatConfig;
        }
    }


}
